# -*- coding: utf-8 -*-
"""
网页读取API接口

功能说明:
- 提供读取指定URL网页内容的API
- 返回扁平结构，包含标题与Markdown内容

作者: MetasoCreator Team
创建时间: 2025-08-21
"""

from flask import request
from flask_restx import Namespace, Resource, fields
from datetime import datetime

from services.reader_service import ReaderService

# 创建命名空间
reader_ns = Namespace('reader', description='网页读取相关API接口')

# 响应模型（用于Swagger展示）
reader_response_model = reader_ns.model('ReaderResponse', {
    'success': fields.Boolean(description='请求是否成功'),
    'title': fields.String(description='网页标题'),
    'url': fields.String(description='网页URL'),
    'markdown': fields.String(description='网页内容（Markdown）'),
    'author': fields.String(description='作者'),
    'date': fields.String(description='发布日期'),
    'credits': fields.Raw(description='积分信息'),
    'error': fields.String(description='错误信息（失败时）'),
    'timestamp': fields.String(description='响应时间戳')
})


@reader_ns.route('')
class ReaderResource(Resource):
    @reader_ns.doc('read_webpage')
    @reader_ns.marshal_with(reader_response_model)
    @reader_ns.param('url', '网页URL', required=True)
    def get(self):
        try:
            url = request.args.get('url', '').strip()
            service = ReaderService()
            result = service.get_webpage_content(url)
            status = 200 if result.get('success') else 400
            return result, status
        except Exception:
            return {
                'success': False,
                'error': '服务器内部错误',
                'title': '',
                'url': '',
                'content': '',
                'timestamp': datetime.now().isoformat()
            }, 500


@reader_ns.route('/test')
class ReaderTestResource(Resource):
    @reader_ns.doc('test_reader_api')
    def get(self):
        try:
            return {
                'success': True,
                'message': '网页读取API正常',
                'data': {
                    'service_status': 'running',
                    'api_version': '1.0',
                    'timestamp': datetime.now().isoformat()
                },
                'timestamp': datetime.now().isoformat()
            }, 200
        except Exception:
            return {
                'success': False,
                'message': '网页读取API异常',
                'error': '服务器内部错误',
                'timestamp': datetime.now().isoformat()
            }, 500